AMI作成用EC2インスタンスのボリュームサイズ設定の注意点
こんにちは、つくぼし(tsukuboshi0755)です!
最近カスタムAMIからEC2インスタンスを作成する機会があったのですが、その際にうっかりハマってしまいそうな注意点を見つけたので、共有してみます。
やりたい事
以下の、EC2インスタンス2台を作成します。
- 検証インスタンス(ボリュームサイズ:60GB)
- 本番インスタンス(ボリュームサイズ:30GB)
なおOS上での作業手順を省略するため、OS設定及びソフトウェア導入を実施した検証インスタンスを元にしたAMIを作成し、本番インスタンスの起動に使用します。
素直にやってみると...?
上記のやりたい事を達成したい場合、まず以下のような手順が思い浮かびそうです。
- ボリュームサイズが60GBである検証インスタンスを起動
- 検証インスタンスを元に、カスタムAMIを作成
- カスタムAMIを元に、ボリュームサイズが30GBであるを本番インスタンスを起動
実際にやってみましょう。
まず、検証インスタンスをボリュームサイズ60GBで起動します。
なお起動後に検証インスタンスに接続し、OS設定及びソフトウェア導入を実施しておきます。
次に、アクションからイメージを作成
をクリックします。
AMI作成画面では、ボリュームサイズを30GBで設定します。
設定が問題ない事を確認し、AMIを作成してみます。
すると、カスタムAMIのボリュームサイズを30GBで設定したはずなのに、作成済みAMIのストレージ設定を見ると60GBになってしまっていますね。
なぜこのようになってしまうのか、皆さんお気づきでしょうか?
普段からストレージ設定に触れている方であれば、既にお気づきかもしれません。
原因
以上の問題は、EBSボリュームのサイズ縮小がAWSでサポートされていない事が原因です。
EBSはサイズの拡張が容易に実施できる一方で、縮小ができません。
今回EC2のボリュームは60GBで起動してしまっているため、AMIのボリュームも60GB以上でしか作成できないという事ですね。
対処方法
このように、異なるボリュームサイズを持つインスタンス間でAMIを作成し使用したい場合、以下の3通りの対処方法が考えられます。
AMI作成時に、ボリュームサイズを最小インスタンスに合わせる
まだ検証インスタンスを起動していない状態であれば、ボリュームサイズが30GBのAMIを作成する事で、以上の問題をスムーズに回避できます。
この手順では、初めに検証インスタンスのボリュームサイズを一旦30GBで起動します。
OS設定及びソフトウェア導入もインスタンス起動後に実施しておきます。
AMI作成画面でも、ボリュームサイズを30GBで設定します。
作成済みAMIのストレージ設定を見ると、今回はきちんと30GBで設定されてますね。
このAMIを用いて、AMIからインスタンスを起動
ボタンをクリックし、以下の通り本番インスタンスをボリュームサイズ30GBで起動しましょう。
その後ボリューム設定画面で、検証インスタンスのボリュームを選択し、アクションからボリュームの変更
をクリックします。
ここで、ボリュームサイズを60GBに拡張しましょう。
以下の通り、検証インスタンスのボリュームサイズが60GBに拡張されました!
OSのマウント設定を操作し、ボリュームサイズを削減する
検証インスタンスを起動し、OS設定及びソフトウェア導入を既に実施してしまっている場合は、OS側でマウント設定をこねくり回し、ボリュームサイズを強引に削減する方法も考えられます。
ただし、AWSではサポートされていない方法となるため、何か問題が起きた場合は自己責任となってしまいますので、ご注意下さい。
(個人的にはあまり推奨しません)
もしどうしてもこの方法で実施したい場合は、以下の記事が参考になります。
そもそもボリュームサイズを削減する必要はあるか検討する
同じ操作を実施するインスタンスの場合、そもそもインスタンスごとで異なるボリュームサイズを使うべきか検討し直すのも一つの手です。
よほど大きなボリュームサイズでインスタンスを起動していない限り、サイズ削減によるコスト削減効果はそこまで大きいものではありません。
またボリュームサイズが異なる事で、全く同じ操作を実施したとしても、ストレージ設定が原因でインスタンスの挙動が変わってしまうリスクも発生します。
特別大きな事情がなければ、同じ操作を実施するインスタンスのボリュームサイズは同一にしておくのが賢明です。
最後に
AMIにストレージ設定が含まれている事は結構忘れがちなので、AMI関連の作業が発生する場合は注意しておくと良さそうです。
また上記の通り、後からEBSを縮小するのはかなり大変なので、ボリュームサイズはインスタンス起動前に念入りに検討しておきましょう。
以上、つくぼしでした!